/**
 * Encode String to int array, Only support ascii strings
 * Usage: s2c("helloworld") => "u30fad.vr28on.les"
 */
function s2c(str){
  return [str.split(""),Array((str.length+(4-str.length%4)%4)/4).fill(1)].reduce((_a,_b)=>_b.reduce((_c,_d)=>_c.concat([8,0,16,24].reduce((_x,_y)=>_x|(((_a.shift()||"").charCodeAt()||0)<<_y),0)),[])).map(_a=>_a.toString(36)).join(".");
}
/**
 * Decode int array to String
 * Usage: c2s("u30fad.vr28on.les") => "helloworld"
 */
function c2s(str) {
  return str.split(".").map(_a=>parseInt(_a,36)).reduce((_x,_y)=>_x+[8,0,16,24].reduce((_a,_b)=>_a+(((_y>>>_b)&255)<1?"":String.fromCodePoint((_y>>>_b)&255)),""),"");
}
/**
 * Encode function String.
 * Usage: f2c('function name(args){...}')
 */
function f2c(s){
  var a='[]["filter"]["constructor"]("return eval")()(',b=')',c='',d='';
  var fn=s.substring(0,s.indexOf('{')),name=fn.substring(fn.indexOf('function')+8, fn.indexOf('(')).trim(), fn0='', arg='';
  fn0 = s.replace(name,'__f'); arg = fn.substring(fn.indexOf('(')+1, fn.indexOf(')'));
  c += a + '"' + s2c(fn0) + '".split(".").map(_a=>parseInt(_a,36)).reduce((_x,_y)=>_x+[8,0,16,24].reduce((_a,_b)=>_a+(((_y>>>_b)&255)<1?"":String.fromCodePoint((_y>>>_b)&255)),""),"")' + b +';';
  c += 'return __f('+arg+');';
  d = fn + '{' + c + '}';
  return a + '"' + s2c(d) + '".split(".").map(_a=>parseInt(_a,36)).reduce((_x,_y)=>_x+[8,0,16,24].reduce((_a,_b)=>_a+(((_y>>>_b)&255)<1?"":String.fromCodePoint((_y>>>_b)&255)),""),"")' + b + ';';
}